/*
约瑟夫问题是一个经典的问题。已知 n 个人（不妨分别以编号 1，2 ，3，…，n 代表 ）围坐在一张圆桌周围，从编号为 k 的人开始，从1开始顺时针报数 1, 2, 3, ...，顺时针数到m 的那个人，出列并输出。然后从出列的下一个人开始，从1开始继续顺时针报数，数到 m的那个人，出列并输出，…依此重复下去，直到圆桌周围的人全部出列。
输入：n, k, m

输出：按照出列的顺序依次输出出列人的编号，编号中间相隔一个空格，每10个编号为一行。

非法输入的对应输出如下：

a)

输入：n、k、m任一个小于1
输出： n,m,k must bigger than 0.

b)

输入：k>n

输出： k should not bigger than n.
*/

/*
测试用例1:

输入：9,3,2↵

输出：4 6 8 1 3 7 2 9 5↵

测试用例2:

输入：10,12,3↵

输出：k should not bigger than n.↵
*/
#include<iostream>
#include<sstream>
#include<vector>
#include<string>
using namespace std;

// 分割字符串，将分割结果存入vector中，并返回
vector<string> splitString(string &str, char c)
{
    // 存储分割后的结果
    vector<string> result;

    // 创建字符串流
    stringstream ss(str);

    // 临时存储分割结果
    string token;

    // 循环获取分割结果
    while(getline(ss, token, c))
    {
        result.push_back(token);
    }

    return result;
}

int main()
{
    string inp = "";
    // 接收用户输入
    cin >> inp;

    // 按逗号分割字符串
    vector<string> result = splitString(inp, ',');

    if(result.size() != 3)
    {
        cout << "输入的格式错误，请正确输入n、k、m" << endl;
    }
    
    int n = stoi(result[0]);
    int k = stoi(result[1]);
    int m = stoi(result[2]);
    
    if(n<1 || m<1 || k<1)
    {
        cout << "n,m,k must bigger than 0." << endl;
        return 0;
    }
    
    if(k > n)
    {
        cout << "k should not bigger than n." << endl;
        return 0;
    }
    
    // 记录每一个人的编号
    vector<int> people;
    for(int i=1;i<=n;i++)
    {
        people.push_back(i);
    }
    
    // 喊1的人的序列
    int last_id = k - 1;
    
    for(int i=0;i<n;i++)
    {
        // 出列的人的序列
        int out_id = (last_id + m - 1) % people.size();
        
        // 记录出列人员的编号
        if(i == n-1)
        {
            cout << people[out_id] << endl;
        }
        else {
            cout << people[out_id] << " ";
        }
        
        // 删除
        people.erase(people.begin() + out_id);
        
        // 下一个喊1的人的序列
        last_id = out_id;
    }
    
    return 0;
}